// 获取该月的天数
export const getDaysInMonth = (year, month) => {
    const day = new Date(year, month + 1, 0)
    return day.getDate()
  }
  
export const isDateInRange = (startTime, endTime, currentTime) => {
    
    // 将输入转换为Date对象
    const start = new Date(startTime).setHours(0, 0, 0, 0);
    const end = new Date(endTime).setHours(0, 0, 0, 0);
    // 判断当前时间是否在范围内
    return currentTime >= start && currentTime <= end;
}
  // 创建日期 yyyy-MM-dd 格式， 用于创建非当前月的日期
  export const handleCrateDate = (year, month, start, end, type, dataList) => {
    const arr = []
    if (type === 'prev') { // 上一月
      if (start === end) return []
      const daysInLastMonth = getDaysInMonth(year, month - 1) // 获取上一个月有多少天
      for (let i = daysInLastMonth - end + 2; i <= daysInLastMonth; i++) {
        arr.push({
          // date: `${month === 0 ? year - 1 : year}-${(month + 1) < 10 ? month === 0 ? 12 : `0${month}` : month}-${i < 10 ? `0${i}` : i}`,
          date: parseTime(new Date(year, month - 1, i)),
          day: i.toString().padStart(2, '0'),
          isCurMonth: false,
          isSelected: false,
          isRangeSelected: false,
          currentIndex: 0,
          data: dataList.filter((item) => {
            return isDateInRange(item.startTime, item.endTime, new Date(year, month - 1, i).getTime())
            // return parseTime(new Date(item.endTime)) === parseTime(new Date(year, month - 1, i))
          })
        })
      }
    } else if (type === 'rear') { // 下一月
      for (let i = start; i <= end; i++) {
        arr.push({
          // date: `${month === 11 ? year + 1 : year}-${(month + 1) < 9 ? `0${month + 2}` : month + 2 <= 12 ? month + 2 : (month + 2) % 12 < 10 ? `0${(month + 2) % 12}` : (month + 2) % 12}-${i < 10 ? `0${i}` : i}`,
          date: parseTime(new Date(year, month + 1, i)),
          day: i.toString().padStart(2, '0'),
          isCurMonth: false,
          isSelected: false,
          isRangeSelected: false,
          currentIndex: 0,
          data: dataList.filter((item) => {
            return isDateInRange(item.startTime, item.endTime, new Date(year, month + 1, i).getTime())
          })
        })
      }
    } else { // 本月
      for (let i = start; i <= end; i++) {
        arr.push({
          // date: `${year}-${(month + 1) < 10 ? `0${month + 1}` : month + 1}-${i < 10 ? `0${i}` : i}`,
          date: parseTime(new Date(year, month, i)),
          day: i.toString().padStart(2, '0'),
          isCurMonth: true,
          isSelected: false,
          isRangeSelected: false,
          currentIndex: 0,
          data: dataList?.filter((item) => {
            return isDateInRange(item.startTime, item.endTime, new Date(year, month, i).getTime())
          })
        })
      }
    }
    return arr
  }
  
  export const handleCreateDatePicker = () => {
    const years = []
    const months = []
    for (let i = 1970; i <= 2099; i++) {
      years.push({
        label: `${i}年`,
        value: i
      })
    }
    for (let i = 0; i <= 11; i++) {
      months.push({
        label: `${i + 1}月`,
        value: i
      })
    }
    return {
      years,
      months
    }
  }
  
  /**
   * Parse the time to string
   * @param {(Object|string|number)} time
   * @param {string} cFormat
   * @returns {string | null}
   */
  export function parseTime(time, cFormat = '{y}-{m}-{d}') {
    if (arguments.length === 0 || !time) {
      return null
    }
    const format = cFormat || '{y}-{m}-{d}'
    let date
    if (typeof time === 'object') {
      date = time
    } else {
      if ((typeof time === 'string')) {
        if ((/^[0-9]+$/.test(time))) {
          // support "1548221490638"
          time = parseInt(time)
        } else {
          // support safari
          // https://stackoverflow.com/questions/4310953/invalid-date-in-safari
          time = time.replace(new RegExp(/-/gm), '/')
        }
      }
  
      if ((typeof time === 'number') && (time.toString().length === 10)) {
        time = time * 1000
      }
      date = new Date(time)
    }
    const formatObj = {
      y: date.getFullYear(),
      m: date.getMonth() + 1,
      d: date.getDate(),
      h: date.getHours(),
      i: date.getMinutes(),
      s: date.getSeconds(),
      a: date.getDay()
    }
    const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
      const value = formatObj[key]
      // Note: getDay() returns 0 on Sunday
      if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }
      return value.toString().padStart(2, '0')
    })
    return time_str
  }
 